/*
* Created on Aug 11, 2005
*/
package cyrille.mail;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Properties;
import javax.mail.AuthenticationFailedException;
import javax.mail.Folder;
import javax.mail.Session;
import javax.mail.Store;
import junit.framework.TestCase;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import cyrille.stress.StressTestUtils;
import edu.emory.mathcs.backport.java.util.concurrent.ExecutorService;
import edu.emory.mathcs.backport.java.util.concurrent.Executors;
import edu.emory.mathcs.backport.java.util.concurrent.TimeUnit;
/**
*
* @author <a href="mailto:cleclerc@pobox.com">Cyrille Le Clerc</a>
*/
public class ImapTester extends TestCase {
private static final Log log = LogFactory.getLog(ImapTester.class);
private String IMAP_SERVER_HOST = "localhost";
private int IMAP_SERVER_PORT = 3344;
public static void main(String[] args) {
junit.textui.TestRunner.run(ImapTester.class);
}
public void testLoadRunnerData() throws Exception {
InputStream in = getClass().getResourceAsStream("msisdn_s3a_wap1.dat");
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
ExecutorService executorService = Executors.newFixedThreadPool(10);
final String password = "W4N40RaNG3";
// skip first line
reader.readLine();
String line;
while ((line = reader.readLine()) != null) {
line = line.trim();
String[] elements = StringUtils.split(line, ',');
final String ommMailboxUser = "0" + elements[0].substring(2) + "@omm-myorange.dk";
// final String externalMailbox1User = elements[1];
// final String externalMailbox2User = elements[2];
// OMM mailbox
Runnable runnableOmmMailbox = new Runnable() {
public void run() {
testOmmMailbox(ommMailboxUser, password);
}
};
executorService.execute(runnableOmmMailbox);
/*
* // External mailbox Runnable runnableExternaMailbox1 = new Runnable() {
*
* public void run() { testExternalMailbox(externalMailbox1User, password); } };
* executorService.execute(runnableExternaMailbox1);
*
* Runnable runnableExternalMailbox2 = new Runnable() {
*
* public void run() { testExternalMailbox(externalMailbox2User, password); } };
* executorService.execute(runnableExternalMailbox2);
*/
}
executorService.shutdown();
executorService.awaitTermination(1, TimeUnit.HOURS);
}
public void testExternalMailbox(String user, String password) {
try {
Session s = openSession();
Store store = s.getStore();
store.connect(this.IMAP_SERVER_HOST, this.IMAP_SERVER_PORT, user, password);
Folder defaultFolder = store.getDefaultFolder();
Folder folder = defaultFolder.getFolder("INBOX");
int messageCount = folder.getMessageCount();
if (messageCount == 0) {
log.error("No message in external mailbox INBOX for " + user);
StressTestUtils.incrementProgressBarFailure();
} else {
// log.debug(user + " INBOX(" + messageCount + ")");
StressTestUtils.incrementProgressBarSuccess();
}
} catch (AuthenticationFailedException afe) {
log.error("Authentication failed with user=" + user + ", password=" + password);
} catch (Exception e) {
log.error("Exception with user=" + user + ", password=" + password + " : " + e.toString(), e);
}
}
public void testOmmMailbox(String user, String password) {
StressTestUtils.incrementProgressBarSuccess();
try {
Session s = openSession();
Store store = s.getStore();
store.connect(this.IMAP_SERVER_HOST, this.IMAP_SERVER_PORT, user, password);
Folder defaultFolder = store.getDefaultFolder();
Folder inboxFolder = defaultFolder.getFolder("INBOX");
if (inboxFolder.getMessageCount() == 0) {
// log.debug("No message in INBOX for " + user);
} else {
log.warn("Unexpected " + inboxFolder.getMessageCount() + " messages in omm mailbox INBOX folder " + user);
}
Folder[] folders = inboxFolder.list();
if (folders.length != 2) {
log.warn("Unexpected number of external mailboxes (" + folders.length + ") for omm mailbox " + user);
}
for (Folder folder : folders) {
Folder externalMailboxInbox = folder.getFolder("INBOX");
if (externalMailboxInbox.getMessageCount() == 0) {
log.error("No message in external account " + folder.getName() + " for omm mailbox " + user);
StressTestUtils.incrementProgressBarFailure();
}
}
store.close();
} catch (AuthenticationFailedException afe) {
log.error("Authentication failed with user=" + user + ", password=" + password);
} catch (Exception e) {
log.error("Exception with user=" + user + ", password=" + password + " : " + e.toString(), e);
}
}
private Session openSession() {
Properties props = new Properties();
props.setProperty("mail.store.protocol", "imap");
props.setProperty("mail.imap.host", this.IMAP_SERVER_HOST);
props.setProperty("mail.imap.port", String.valueOf(this.IMAP_SERVER_PORT));
Session s = Session.getDefaultInstance(props, null);
return s;
}
}